package com.chenfan.ccp.autoconfigure;

import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Configuration;

@Configuration
public class GlobalCommandLineAutoConfigure extends AbstractAutoConfigure implements CommandLineRunner {

    @Override
    public void run(String... args) throws Exception {


//        try {
//
//
//        } catch (Exception e) {
//
//        }
    }

}


//
//
//
//
//
//    public static void loadData() {
//        //开始获取class的文件
//        try {
////            String classFileName = StringBuilderTest.class.getName();
//            String classFileName = "cn.afterturn.easypoi.util.PoiPublicUtil";
//            CtClass ctClass = ClassPool.getDefault().getCtClass(classFileName);
//            if(ctClass == null) {
//                System.out.println("Class File (" + classFileName + ") Not Found.....");
//            } else {
//                enhance(ctClass, "getFileExtendName");
//                //为class添加计算时间的过滤器
//                ctClass.writeFile();
//            }
//            Class<?> clazz = ctClass.toClass();
////            PoiPublicUtil test = (PoiPublicUtil) clazz.newInstance();
//            PoiPublicUtil.getFileExtendName(null);
//
//
//        } catch (Exception e) { //类文件没有找到
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 为方法添加拦截器:
//     * <pre>
//     *     构造拦截器方法的正文时使用一个 java.lang.StringBuffer 来累积正文文本(这显示了处理 String 的构造的正确方法，
//     *     与在 StringBuilder 的构造中使用的方法是相对的)。这种变化取决于原来的方法是否有返回值。
//     *     如果它 有返回值，那么构造的代码就将这个值保存在局部变量中，这样在拦截器方法结束时就可以返回它。
//     *     如果原来的方法类型为 void ，那么就什么也不需要保存，也不用在拦截器方法中返回任何内容。
//     * </pre>
//     * @param clazz 方法所属的类
//     * @param method 方法名称
//     */
//    private static void enhance(CtClass clazz, String method) throws NotFoundException, CannotCompileException {
//
//        //获取方法信息,如果方法不存在，则抛出异常
//        CtMethod ctMethod = clazz.getDeclaredMethod(method);
//        //将旧的方法名称进行重新命名，并生成一个方法的副本，该副本方法采用了过滤器的方式
//        String nname = method + "$impl";
//        ctMethod.setName(nname);
//        CtMethod newCtMethod = CtNewMethod.copy(ctMethod, method, clazz, null);
//
//        /*
//         * 为该方法添加时间过滤器，用来计算时间。
//         * 这就需要我们去判断获取时间的方法是否具有返回值
//         */
//        String type = ctMethod.getReturnType().getName();
//        StringBuffer body = new StringBuffer();
//        body.append("{\n");
//
//        if(!"void".equals(type)) {
//            body.append(type + " result = ");
//        }
//
//        //可以通过$$将传递给拦截器的参数，传递给原来的方法
//        body.append(nname + "($$);\n");
//
//        //  finish body text generation with call to print the timing
//        //  information, and return saved value (if not void)
//        if(!"void".equals(type)) {
//            body.append("return result;\n");
//        }
//
//        body.append("}");
//
//        //替换拦截器方法的主体内容，并将该方法添加到class之中
//        newCtMethod.setBody(body.toString());
//        clazz.addMethod(newCtMethod);
//
//        //输出拦截器的代码块
//        System.out.println("拦截器方法的主体:");
//        System.out.println(body.toString());
//    }
//
////    public static void main(String[] args) {
////        loadData();
////    }
//
//}
